using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using SystemFrameworks;
using Microsoft.ApplicationBlocks.Data;
using Common; using MinCultura.Sipa.DataAccess.EntidadesArtes;
using SystemFrameworks;

namespace MinCultura.Sipa.EntidadesArtes
{
	/// <summary>
	/// Clase de acceso a datos para la entidad ART_ENTIDAD_FORMACION
	/// </summary>
	public class EntidadFormacion 
	{
		#region Private Data Access Atributes

		private const String ENT_ID_PARAM = "@ENT_ID";
		private const String FRM_ID_PARAM = "@FRM_ID";
		private const String ENT_SINO_IMPARTE_FORMACION_PARAM = "@ENT_SINO_IMPARTE_FORMACION";

		#endregion Private Data Access Atributes

		/// <summary>
		/// Constructor de la clase ARTENTIDADFORMACION
		/// </summary>
        public EntidadFormacion(string strCadenaConecxion)
        {
            ConnectionString = strCadenaConecxion;
        }
        #region ConnectionString

        private string _cadenaConexion;

        public string ConnectionString
        {
            get { return _cadenaConexion; }
            set { _cadenaConexion = value; }
        }

        #endregion

		public EntidadFormacionData BuscarEntidadFormacion()
		{
			EntidadFormacionData response = new EntidadFormacionData();
			SqlHelper.ExecuteDataTable(this.ConnectionString, CommandType.StoredProcedure, "PAS_BUSCAR_ART_ENTIDAD_FORMACION", response);
			if (response.Rows.Count == 0)
				return null;
			return response;
		}


		public EntidadFormacionData ConsultarEntidadFormacion(decimal parENT_ID)
		{
			EntidadFormacionData response = new EntidadFormacionData();
			SqlParameter param1 = new SqlParameter(ENT_ID_PARAM, parENT_ID);
			SqlParameter[] parameters = {param1};
			SqlHelper.ExecuteDataTable(this.ConnectionString, CommandType.StoredProcedure, "PAS_CONSULTAR_ART_ENTIDAD_FORMACION", response, parameters);
			if (response.Rows.Count == 0)
				return null;
			return response;
		}

		public void AdicionarEntidadFormacion(EntidadFormacionData datos, params SqlTransaction[] transaccion )
		{			
			try
			{
				foreach (DataRow row in datos.Rows)
				{
					SqlParameter param1 = new SqlParameter(ENT_ID_PARAM, row[EntidadFormacionData.ENT_ID_FIELD]);
					SqlParameter param2 = new SqlParameter(FRM_ID_PARAM, row[EntidadFormacionData.FRM_ID_FIELD]);
					SqlParameter param3 = new SqlParameter(ENT_SINO_IMPARTE_FORMACION_PARAM, row[EntidadFormacionData.ENT_SINO_IMPARTE_FORMACION_FIELD]);

					SqlParameter[] parameters = {param1, param2, param3};

					if (transaccion.Length == 0)
						SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ADICIONAR_ART_ENTIDAD_FORMACION", parameters);
					else
						SqlHelper.ExecuteNonQuery(transaccion[0], CommandType.StoredProcedure, "PAS_ADICIONAR_ART_ENTIDAD_FORMACION", parameters);	
				}
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ADICIONAR_ART_ENTIDAD_FORMACION o PAS_ADICIONAR_ART_ENTIDAD_FORMACION"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "PAS_ADICIONAR_ART_ENTIDAD_FORMACION o PAS_ADICIONAR_ART_ENTIDAD_FORMACION"), ex);
			}
		}


		public void AdicionarEntidadFormacion(EntidadFormacionData datos, 
			AreasArtisticasFormacionEntidadData objDataAreasArtisiticasEntidad, 
			NivelEntidadesImparteData objDataNivelFormacionEntidad,
			params SqlTransaction[] objTrans)
		{

            AreasArtisticasFormacionEntidad objControlAreasArtisticas = new AreasArtisticasFormacionEntidad(ConnectionString);
            NivelEntidadesImparte objControlNivelEntidades = new NivelEntidadesImparte(ConnectionString);			
			try
			{
				if (objTrans.Length>0)
				{
					AdicionarEntidadFormacion(datos,objTrans);
					objControlAreasArtisticas.AdicionarAreasArtisticasFormacionEntidad(objDataAreasArtisiticasEntidad, objTrans);
					objControlNivelEntidades.AdicionarNivelEntidadesImparte(objDataNivelFormacionEntidad, objTrans);
				}
				else
				{
					AdicionarEntidadFormacion(datos);
					objControlAreasArtisticas.AdicionarAreasArtisticasFormacionEntidad(objDataAreasArtisiticasEntidad);
					objControlNivelEntidades.AdicionarNivelEntidadesImparte(objDataNivelFormacionEntidad);
				}
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "AdicionarEntidadFormacion"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "AdicionarEntidadFormacion"), ex);
			}
		}

		public void ActualizarEntidadFormacion(EntidadFormacionData datos, params SqlTransaction[] transaccion)
		{			
			try
			{
				foreach (DataRow row in datos.Rows)
				{
					SqlParameter param1 = new SqlParameter(ENT_ID_PARAM, row[EntidadFormacionData.ENT_ID_FIELD]);
					SqlParameter param2 = new SqlParameter(FRM_ID_PARAM, row[EntidadFormacionData.FRM_ID_FIELD]);
					SqlParameter param3 = new SqlParameter(ENT_SINO_IMPARTE_FORMACION_PARAM, row[EntidadFormacionData.ENT_SINO_IMPARTE_FORMACION_FIELD]);

					SqlParameter[] parameters = {param1, param2, param3};
					
					if (transaccion.Length == 0)
						SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ACTUALIZAR_ART_ENTIDAD_FORMACION", parameters);
					else
						SqlHelper.ExecuteNonQuery(transaccion[0], CommandType.StoredProcedure, "PAS_ACTUALIZAR_ART_ENTIDAD_FORMACION", parameters);
				}
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ACTUALIZAR_ART_ENTIDAD_FORMACION o PAS_ACTUALIZAR_ART_ENTIDAD_FORMACION"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorActualizar", "PAS_ACTUALIZAR_ART_ENTIDAD_FORMACION o PAS_ACTUALIZAR_ART_ENTIDAD_FORMACION"), ex);
			}
		}

		
		public void ActualizarEntidadFormacion(EntidadFormacionData datos, 
			AreasArtisticasFormacionEntidadData areasArtisticasFormacionEntidadData,
			NivelEntidadesImparteData nivelEntidadesImparteData, 
			params SqlTransaction[] transaccion)
		{	
			decimal idEntidad = Convert.ToDecimal(datos.Rows[0][EntidadFormacionData.ENT_ID_FIELD]);

            AreasArtisticasFormacionEntidad objControlAreasArtisticas = new AreasArtisticasFormacionEntidad(ConnectionString);
            NivelEntidadesImparte objControlNivelEntidades = new NivelEntidadesImparte(ConnectionString);			
			try
			{
				if (transaccion.Length>0)
				{
					ActualizarEntidadFormacion(datos,	transaccion[0]);

					objControlAreasArtisticas.EliminarAreasArtisticasFormacionEntidad(idEntidad,transaccion[0]);
					objControlAreasArtisticas.AdicionarAreasArtisticasFormacionEntidad(areasArtisticasFormacionEntidadData,transaccion[0]);
				
					objControlNivelEntidades.EliminarNivelEntidadesImparte(idEntidad,transaccion[0]);
					objControlNivelEntidades.AdicionarNivelEntidadesImparte(nivelEntidadesImparteData,transaccion[0]);

				}
				else
				{
					ActualizarEntidadFormacion(datos);

					objControlAreasArtisticas.EliminarAreasArtisticasFormacionEntidad(idEntidad);
					objControlAreasArtisticas.AdicionarAreasArtisticasFormacionEntidad(areasArtisticasFormacionEntidadData);
				
					objControlNivelEntidades.EliminarNivelEntidadesImparte(idEntidad);
					objControlNivelEntidades.AdicionarNivelEntidadesImparte(nivelEntidadesImparteData);
				}
				
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "ActualizarEntidadFormacion"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorActualizar", "ActualizarEntidadFormacion"), ex);
			}
		}

		/// <summary>
		/// Elimina un registro de la entidad Artentidadformacion
		/// </summary>
		/// <param name="parENT_ID">Identificador del registro
		public void EliminarEntidadFormacion(decimal parENT_ID)
		{
			try
			{
				SqlParameter param1 = new SqlParameter(ENT_ID_PARAM, parENT_ID);
				SqlParameter[] parameters = {param1};
				SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ELIMINAR_ART_ENTIDAD_FORMACION", parameters);
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ELIMINAR_ART_ENTIDAD_FORMACION"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "PAS_ELIMINAR_ART_ENTIDAD_FORMACION"), ex);
			}
		}

		public void EliminarEntidadFormacion(ArrayList arrIDs)
		{
			SqlConnection objConnection = new SqlConnection(ConnectionString);
			objConnection.Open();
			SqlTransaction objTrans = objConnection.BeginTransaction();

			try
			{
				foreach (object Item in arrIDs)
				{
					SqlParameter param1 = new SqlParameter(ENT_ID_PARAM, decimal.Parse(Item.ToString()));
					SqlParameter[] parameters = {param1};
					SqlHelper.ExecuteNonQuery(objTrans, CommandType.StoredProcedure, "PAS_ELIMINAR_ART_ENTIDAD_FORMACION", parameters);
				}
				objTrans.Commit();
			}
			catch (SqlException sqlEx)
			{
				objTrans.Rollback();
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ELIMINAR_ART_ENTIDAD_FORMACION"), sqlEx);
			}
			catch (Exception ex)
			{
				objTrans.Rollback();
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "PAS_ELIMINAR_ART_ENTIDAD_FORMACION"), ex);
			}
			finally
			{
				objConnection.Close();
			}
		}

	}
}